﻿Public Class CDNCLabelState2 : Inherits CStateBase

    ''' <summary>
    ''' 実行可能かを判断する
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function IsEnter(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("CDNCLabelState2.IsEnter")
        If CCommon.isInStr(task.ActionCd, "LABEL-D") Then
            Return True
        Else
            Return False
        End If
    End Function

    ''' <summary>
    ''' 実行メソッド
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExecute(ByVal task As CTaskBase) As CStateBase
        Dim nextState As CStateBase
        Dim pdaTask As CPDATask2 = DirectCast(task, CPDATask2)
        Debug.WriteLine("CINOACLabelState2.DoExecute")
        Dim readText As String = task.ProcessText
        Dim itemKey As String = CCommon.TrimCode(readText, CCommon.EnumGetString.LBL_D_ITEM_KEY)
        Dim itemCd As String = "" ''DAOから読込み
        Dim orderCd As String = CCommon.TrimCode(readText, CCommon.EnumGetString.LBL_D_ORDER_CD)
        Dim uniqueCd As String = readText
        Dim inBoxQty As Integer = 0

        ''DAO
        Dim itemDAO As CItemDAO = CItemDAO.GetInstance()
        Dim itemData As strctItemInfo = itemDAO.GetItemInfo(itemKey)
        If itemData.MngNo <> "" Then
            itemCd = itemData.SysItemCd
        End If

        ''マツダ対象のDNCラベルの場合、先頭２ケタをカットする
        If CCommon.getIsInMAZDA(CCommon.TrimCode(readText, CCommon.EnumGetString.LBL_D_ISINMAZDA)) Then
            orderCd = CCommon.trimMazdaShipOrderOrderCd(orderCd)
        Else
            inBoxQty = CCommon.From36To10(CCommon.TrimCode(readText, CCommon.EnumGetString.LBL_D_ORDER_QTY))
        End If



        ''読込み済みのラベルではないか確認（ユニークコード）N:アラート
        Dim uniqueCdInfo As CPDATask2.strctUniqueCdInfo = Nothing
        uniqueCdInfo.labelType = CCommon.LABEL_DNC
        uniqueCdInfo.itemCd = itemCd
        uniqueCdInfo.uniqueCd = uniqueCd
        uniqueCdInfo.readDateTime = Now()

        Select Case pdaTask.addUniqueCd(uniqueCdInfo)
            Case -1
                ''アラート
                Dim result As String = ""
                Dim prevWindowMode As EnumWindowMode
                Do While result <> "[OK]"
                    If result = "" Then
                        pdaTask.Hardware.alert()
                        prevWindowMode = pdaTask.WindowManager.GetWindowMode()
                        pdaTask.WindowManager.SetAlertMessage(CCommon.CNS_MSG_015, CCommon.COLOR_BLACK, CCommon.COLOR_WHITE)
                        pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.ALERT_MODE)
                        'Debug.WriteLine(CCommon.CNS_MSG_015)

                    End If
                    result = task.ReadTextWait(-1)
                    'Debug.WriteLine("RESULT:{0},{1}", result, task.ProcessText)
                Loop
                pdaTask.WindowManager.ChangeWindowMode(prevWindowMode)
            Case 2
                ''マツダ重複
            Case 1
                ''区切りラベル
                ''（社内ラベルが存在しているかのチェック）
                If pdaTask.isInInnerLabel() Then
                    ''既に社内ラベルを読込んでいる場合はクリアして親ラベルになる
                    If pdaTask.isInChildLabel() Then
                        ''前回のシングル構造体をLabelInfoにセット
                        If pdaTask.addLabelInfo(itemCd, uniqueCd) Then
                            ''新規でシングル構造体を作成
                            pdaTask.clrSingleLabelInfo()
                        End If
                        Debug.WriteLine("aaaaaa-1")
                        pdaTask.addSingleLabelInfo(readText, orderCd, itemCd, CCommon.LABEL_DNC, inBoxQty, False)

                    Else
                        ''エラー
                        pdaTask.Hardware.warning()
                        ''前回読込んだ親ラベルに対して子ラベルが読込まれていない
                        pdaTask.delLastUniqueCd() ''登録したユニークコードを削除

                        Dim result As String = ""
                        Dim prevWindowMode As EnumWindowMode
                        Do While result <> "[OK]"
                            If result = "" Then
                                prevWindowMode = pdaTask.WindowManager.GetWindowMode()
                                pdaTask.WindowManager.SetAlertMessage(CCommon.CNS_MSG_016, CCommon.COLOR_WHITE, CCommon.COLOR_RED)
                                pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.ALERT_MODE)
                            End If
                            result = task.ReadTextWait(-1)
                            'Debug.WriteLine("RESULT:{0},{1}", result, task.ProcessText)
                        Loop
                        pdaTask.WindowManager.ChangeWindowMode(prevWindowMode)



                        task.ErrorCd = "ER"
                        task.ProcessText = ""
                        nextState = GetNextState(task, GetType(CErrorState2))
                        Return nextState

                    End If
                Else
                    ''社内ラベルが存在していない＆既に親ラベルが存在している場合は子になる


                    If pdaTask.isReadParentLabel() Then
                        ''前回のシングル構造体をLabelInfoにセット
                        ''If pdaTask.addLabelInfo() Then
                        ''新規でシングル構造体を作成
                        ''pdaTask.clrSingleLabelInfo()
                        ''End If
                        Debug.WriteLine("aaaaaa-2")
                        'MessageBox.Show("aaaaa-2")
                        'MessageBox.Show("inBoxQty:" & inBoxQty)
                        If Not pdaTask.addSingleLabelInfo(readText, orderCd, itemCd, CCommon.LABEL_DNC, inBoxQty, False) Then
                            ''エラー
                            pdaTask.Hardware.warning()
                            ''対象ではないラベル
                            pdaTask.delLastUniqueCd() ''登録したユニークコードを削除

                            Dim result As String = ""
                            Dim prevWindowMode As EnumWindowMode
                            Do While result <> "[OK]"
                                If result = "" Then
                                    prevWindowMode = pdaTask.WindowManager.GetWindowMode()
                                    pdaTask.WindowManager.SetAlertMessage(CCommon.CNS_MSG_016, CCommon.COLOR_WHITE, CCommon.COLOR_RED)
                                    pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.ALERT_MODE)
                                End If
                                result = task.ReadTextWait(-1)
                                'Debug.WriteLine("RESULT:{0},{1}", result, task.ProcessText)
                            Loop
                            pdaTask.WindowManager.ChangeWindowMode(prevWindowMode)



                            task.ErrorCd = "ER"
                            task.ProcessText = ""
                            nextState = GetNextState(task, GetType(CErrorState2))
                            Return nextState
                        End If

                    ElseIf pdaTask.isInChildLabel() Then
                        'MessageBox.Show("isInChildLabel")
                        ''前回のシングル構造体をLabelInfoにセット
                        If pdaTask.addLabelInfo(itemCd, uniqueCd) Then
                            ''新規でシングル構造体を作成
                            pdaTask.clrSingleLabelInfo()
                        End If
                        'pdaTask.addSingleLabelInfo(readText, orderCd, itemCd, CCommon.LABEL_MAZDA, 0, False)
                        pdaTask.addSingleLabelInfo(readText, orderCd, itemCd, CCommon.LABEL_DNC, inBoxQty, False)

                    Else

                        ''エラー
                        pdaTask.Hardware.warning()
                        ''対応する親ラベルが読まれていない
                        pdaTask.delLastUniqueCd() ''登録したユニークコードを削除

                        Dim result As String = ""
                        Dim prevWindowMode As EnumWindowMode
                        Do While result <> "[OK]"
                            If result = "" Then
                                prevWindowMode = pdaTask.WindowManager.GetWindowMode()
                                pdaTask.WindowManager.SetAlertMessage(CCommon.CNS_MSG_016, CCommon.COLOR_WHITE, CCommon.COLOR_RED)
                                pdaTask.WindowManager.ChangeWindowMode(EnumWindowMode.ALERT_MODE)
                            End If
                            result = task.ReadTextWait(-1)
                            'Debug.WriteLine("RESULT:{0},{1}", result, task.ProcessText)
                        Loop
                        pdaTask.WindowManager.ChangeWindowMode(prevWindowMode)



                        task.ErrorCd = "ER"
                        task.ProcessText = ""
                        nextState = GetNextState(task, GetType(CErrorState2))
                        Return nextState
                    End If



                End If


        End Select

        task.ActionCd = "LABEL"
        task.ProcessText = ""
        nextState = GetNextState(task)
        Return nextState
    End Function

    ''' <summary>
    ''' 終了メソッド(未使用)
    ''' </summary>
    ''' <param name="task"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function DoExit(ByVal task As CTaskBase) As Boolean
        Debug.WriteLine("CDNCLabelState2.DoExit")
        Return True
    End Function

End Class
